<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组扁平化</title>
</head>

<body>
    <script>
        //flat方法
        // let arr1 = [1,2,3,[4,5,[6,7,[8]]]]
        // let arr2 = arr1.flat(Infinity)
        // console.log(arr1);
        // console.log(arr2);

        //ES6扩展运算符
        // function flatten(arr){
        //     while(arr.some(elem => Array.isArray(elem))){
        //         arr = [].concat(...arr)
        //     }
        //     return arr
        // }

        //toString + split + map
        // function flatten(arr){
        //     return arr.toString().split(',').map(elem => {
        //         return Number(elem)
        //     })
        // }

        //递归
        // function flatten(arr){
        //     let res = []
        //     if(!Array.isArray(arr)){
        //         return
        //     }
        //     arr.forEach(elem => {
        //         if(Array.isArray(elem)){
        //             res = res.concat(flatten(elem))
        //         }else{
        //             res.push(elem)
        //         }
        //     })
        //     return res
        // }

        // reduce实现
        function flatten(arr) {
            return arr.reduce((accu, cur) => {
                return accu.concat(Array.isArray(cur) ? flatten(cur) : cur)
            }, [])
        }
        let arr1 = [1, 2, 3, [4, 5, [6, 7, [8]]]]
        let arr2 = flatten(arr1)
        console.log(arr1);
        console.log(arr2);
    </script>
</body>

</html>